//
//  MapViewController.m
//  MapKitTutorial
//
//  Created by Luca Di Franco on 25/03/10.
//  Copyright 2010 Luca Di Franco. All rights reserved.
//

#import "MapViewController.h"
#import "GoogleHQAnnotation.h"
#import "InfoViewController.h"


@implementation MapViewController

#pragma mark -
#pragma mark View life cycle

- (void)loadView {
	// Titolo della view (quello visualizzato nella navigation bar)
	self.title = @"Mappa";
	// Creiamo una mappa e settiamola come view di questo view controller
	MKMapView *map= [[[MKMapView alloc] init] autorelease];
	map.delegate = self;
	map.showsUserLocation = YES;
	self.view = map;
	// Aggiungiamo una annotation che verrà visualizzata sulla mappa
	[map addAnnotation:[[[GoogleHQAnnotation alloc] init] autorelease]];
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
	return YES;
}

#pragma mark -
#pragma mark MKMapViewDelegate methods

// Questo metodo viene chiamato ogniqualvolta viene aggiunta una annotation alla mappa
- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views {
	// Se c'è l'annotation view relativa alla posizione dell'utente (il puntino blu), zoommiamo mettendo l'utente al centro della mappa
	for (MKAnnotationView *annotationView in views) {
		if (annotationView.annotation == mapView.userLocation) {
			MKCoordinateSpan span = MKCoordinateSpanMake(0.3, 0.3); // Parametri: 1 = ~111 km -> 0.3 = ~33 km
			MKCoordinateRegion region = MKCoordinateRegionMake(mapView.userLocation.coordinate, span);
			[mapView setRegion:region animated:YES];
		}
	}
}

// Metodo che viene chiamato quando dobbiamo creare la view di una annotation.
// Se vogliamo usare quella di default usiamo come valore di ritorno nil
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation {
	// Se dobbiamo creare l'annotation view relativa alla posizione dell'utente usiamo quella di default (il puntino blu)
	if (annotation == mapView.userLocation) {
		return nil;
	}
	// Altrimenti usiamo come annotation view un'immagine con un disclosure button sulla destra del callout
	MKAnnotationView *annotationView = [[[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"Pin"] autorelease];
	annotationView.image = [UIImage imageNamed:@"google.png"];
	annotationView.canShowCallout = YES;
	annotationView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
	return annotationView;
}

// Questo metodo viene invocato quando si preme un bottone presente nel callout
- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control {
	InfoViewController *nextViewController = [[[InfoViewController alloc] initWithUserLocation:mapView.userLocation.location annotation:view.annotation] autorelease];
	[self.navigationController pushViewController:nextViewController animated:YES];
}

#pragma mark -
#pragma mark Memory management

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
}

- (void)dealloc {
    [super dealloc];
}

@end
